package com.semac.server.rpc;

import java.sql.SQLException;

import com.semac.client.rpc.ServicoAutenticacaoRPC;
import com.semac.server.database.classesbase.Database;
import com.semac.server.database.fetchers.PessoaDataFetcher;
import com.semac.shared.exceptions.AuthenticationException;
import com.semac.shared.model.Pessoa;

public class ServicoAutenticacaoRPCImpl extends SemacRemoteServiceServlet implements ServicoAutenticacaoRPC {
	private static final long serialVersionUID = -3173121076752350976L;

	@Override
	public Pessoa getPessoaLogada() {
		return this.getPessoaLogadaNaSession();
	}

	@Override
	public void fazLogin(String mail, String senha) throws AuthenticationException {
		//verifica no banco se usuario pode logar com essas credenciais
		Pessoa pessoa = null;
		
		//os replace na string abaixo servem pra dificultar o sql injection
		String whereString = "email='" +  mail.trim().replace("'", "''") + "' and " + 
							  "senha ='" + senha.trim().replace("'", "''") + "'"; 
		
		PessoaDataFetcher dataFetcher = new PessoaDataFetcher(whereString);
		
		
		try {
			Database.getInstance().doSelect(dataFetcher);
		} catch (SQLException e) {				
			e.printStackTrace();
			throw new AuthenticationException("Ooops! Houve falha no banco..");
		}
		
		
		pessoa = dataFetcher.getFirstOccurrence();
		if (pessoa == null)
			throw new AuthenticationException("Usuário ou senha incorretos!");
		
		this.setPessoaLogadaNaSession(pessoa);
		
		
		
		
	}

	@Override
	public void fazLogout() {
		this.setPessoaLogadaNaSession(null);
	}
}
